import java.util.*;
/**
 * This program demonstrates object construction.
 * Created by ScorpionOrange on 2016/06/11.
 */
public class ConstructorTest {
    public static void main(String[] args){
        //fill the staff array with three Employee objects

        Employee[] staff = new Employee[3];

        staff[0] = new Employee("Harry", 40000);
        staff[1] = new Employee(60000);
        staff[2] = new Employee();

        //print out information about all Employee objects
        for(Employee e : staff){
            System.out.println("name = " + e.getName() +
                               ", id = " + e.getId() +
                               ", salary = " + e.getSalary());
        }
    }
}

class Employee{
    private static int nextId;

    private int id;
    private String name = ""; //instance field initialization
    private double salary;

    //static initialization block

    static {
        Random generator = new Random();
        //set nextId to random number between 0 and 9999
        nextId = generator.nextInt(10000);
    }

    //object initialization block
    {
        id = nextId;
        nextId++;
    }

    //three overloaded constructors
    public Employee(String aname, double asalary){
        name = aname;
        salary = asalary;
    }

    //calls the Employee(String, double) constructor
    public Employee(double asalary){
        this("Employee #" + nextId, asalary);
    }

    //the default constructors
    public Employee(){
        //name initialized to "" -- see above
        //salary no explicitly set -- initialized to 0
        //id initialized in initialization block
    }

    public String getName(){
        return name;
    }

    public double getSalary(){
        return salary;
    }

    public int getId(){
        return id;
    }

}
